﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;

namespace ArekChatServer
{
    class Program
    {
        static TcpClient connected;
        static public void Main(string[] args)
        {
            TcpListener listener = new TcpListener(IPAddress.Any, 54321);
            listener.Start(10);
            connected = listener.AcceptTcpClient();

            while (true)
            {

                receive();
            }
        }

        static byte[] buffer = new byte[256];
        static void receive()
        {
            System.Text.UTF8Encoding encoding = new UTF8Encoding();
            NetworkStream read = connected.GetStream();
            int data = read.Read(buffer, 0, 256);
            string msg_t = encoding.GetString(buffer);                      
            //az msg_t felépítése :  0-20 sendename, 21-40 targetname, 41-256 message
            string sendername = msg_t.Remove(20, 236);
            string targetname = msg_t.Remove(0, 20);
            targetname = targetname.Remove(20, 216);
            string msg = msg_t.Remove(0, 40);

            msg = trimmer(msg, 216);
            targetname = trimmer(targetname, 20);
            sendername = trimmer(sendername, 20);

            if (targetname == "")
            {
                // Példányosítani kell egy új felhasználót username névvel (login ablakból jött üzenet)
                // msg-be kéne megkapni a kliens IP címét
            }
            else
            {
                send(sendername, targetname, msg);
            }
        }

        static void send(string sendername, string targetname, string msg)
        {

            NetworkStream stream = connected.GetStream();
            System.Text.UTF8Encoding encoding = new UTF8Encoding();

            if (targetname == "Broadcast")              //ha broadcast üzenet jön, akkor küldje mindenkinek, különben csak a kiválasztottnak (casenset meg kéne oldani)
            {
                byte[] packet;
                packet = encoding.GetBytes(sendername + " uzenete :\r\n" + msg);
                stream.Write(packet, 0, packet.Length);
            }
        }

        static string trimmer(string text, int length)    //levágja a spaceket és a /0-át a szövegek végéről
        {
            int i = length;
            do
            {
                i--;
            } while (text[i] == '\0' || text[i] == ' ');
            text = text.Substring(0, i + 1);
            return text;
        }
    }
}
